package org.sunriz.server;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;

import org.sunriz.DAO.Signal;
import org.sunriz.utils.Constant;
import org.sunriz.utils.FolderUtil;
import org.sunriz.utils.GetName;
import org.sunriz.utils.InfoGet;

import static org.sunriz.utils.RegexManager.*;

/**
 * 这是什么
 */
public class GetOutput {

    // 页码
    private static String pageNumber = "";
    // 块号
    private static String blockNum = "";
    // 输出
    public static HashMap<String, List<Signal>> output = new HashMap();


    /**
     * GetAllBlock 类用于处理区块相关的操作。
     * 该类主要负责遍历指定文件夹下的所有文件，并对每个文件的内容进行逐行读取和处理，
     * 包括提取页面编号（pageNumber）和区块ID（blockNum）等信息。
     */
    public static HashMap<String, List<Signal>> getOutput() {
        // 获取文件列表
        List<File> fileList = FolderUtil.getFileList();

        for (File file : fileList) {

            // 获取文件名
            String fileName = file.getName();
            System.out.println("Output处理文件: " + fileName);

            List<Signal> signals = new ArrayList<>();
            output.put(fileName, signals);

            // 获取文件内容
            try (BufferedReader reader = new BufferedReader(
                    new InputStreamReader(new FileInputStream(file), Constant.ENCODING))) {
                String line;
                while ((line = reader.readLine()) != null) {

                    // 如果是Func，那么判断是否是NetAO/NetDO/PgAO/PgDO
                    Matcher funcPattern = FUNC_PATTERN.matcher(line);
                    if (funcPattern.find()) {
                        // 如果是输出点,提取type,name,pageNumber,blockNum
                        if (line.contains(Constant.PgAO) || line.contains(Constant.PgDO) || line.contains(Constant.NetAO) || line.contains(Constant.NetDO)) {

                            // 获取type
                            Matcher matcher = TYPE_PATTERN.matcher(line);
                            matcher.find();
                            String type = matcher.group(0).trim();

                            if (type.equals("NetDO")) {
                                System.out.printf("");
                            }

                            // 获取blockNum
                            Matcher matcher2 = BLCOK_PATTERN.matcher(line);
                            matcher2.find();
                            blockNum = matcher2.group(2);

                            // 获取点名
                            String nameLine = reader.readLine();
                            String name = GetName.getLastName(nameLine);

                            // 获取pageNumber
                            reader.readLine();
                            reader.readLine();
                            line = reader.readLine();
                            Matcher pagePatter = PAGE_PATTERN.matcher(line);
                            if (pagePatter.find()) {
                                pageNumber = InfoGet.getPageNumber(line);
                            }

                            signals.add(new Signal(name, type, pageNumber, blockNum));
                        }
                    }

                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return output;
    }


}
